package com.chzu.utils;

import org.nutz.dao.Chain;
import org.nutz.dao.Cnd;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;

import java.util.*;

/**
 * @author liangzhuo
 * @create 2021-10-22-21:08
 */
public class TbDataUtils {


    /**
     * 目前解决数据添加到汇总库的方法
     * 1.再添加一个字段用来判断是否已添加 1为以添加 0为默认值未添加
     * 2.通过对比updateTime来判断某一个或两个字段是否已经更改
     */

    public static void tbData() {
        //遍历所有需要同步的数据库链接池
        Map<String, Dao> daoMap = GlobalCache.dataSourceMap;
        // 所有的汇库表名集合
        for (String id : daoMap.keySet()) {
            Dao serverDao = daoMap.get(id);

            /*遍历所有表*/
            for (String allTable : GlobalCache.AllTables) {
                List<Map> resultList = GlobalCache.objectCtl.list(serverDao, Sqls.create("select * from "+ allTable +""));
                for (Map map : resultList) {
                    /*获取第一个key 目的：解决主键名不全是id 如：（dept_id.....）的问题*/
                    String firstKey = null;
                    for (Object o : map.keySet()) {
                        firstKey = (String) o;
                        break;
                    }
                    /*通过主键id(firstKey) 以及 code(库名) 联合查询汇总库中的此表中是否存在这条数据
                     * 如果存在 返回主键id(firstKey) 执行update方法 ： **目前就算数据未发生修改也会执行此方法
                     * 还未实现只对修改过的数据进行更新
                     * */
                    String uid = GlobalCache.objectCtl.getStrRowValue(GlobalCache.localDao, Sqls.create("select uid from "+allTable+" where code='" + GlobalCache.pojoList.get(Integer.parseInt(id) - 1).getTableName().replace("saas_cloud_", "") +"' and " + firstKey +"='" + map.get(firstKey) + "'"));
                    if (uid != "") {
                        /*进行更新操作*/
                        GlobalCache.localDao.update(allTable, Chain.from(map), Cnd.where("uid", "=", uid));
                    } else {
                        /* 说明 要操作的表名*/
                        map.put(".table",allTable);
                        /*添加数据库名称 且除去库名的前缀（saas_cloud_）*/
                        map.put("code",GlobalCache.pojoList.get(Integer.parseInt(id) - 1).getTableName().replace("saas_cloud_", ""));
                        GlobalCache.localDao.insert(map);
                    }
                }
            }
        }
    }

//    public static void tbData() {
//        //遍历所有需要同步的数据库链接池
//        Map<String, Dao> daoMap = GlobalCache.dataSourceMap;
//        // 所有的汇库表名集合
//        for (String id : daoMap.keySet()) {
//            Dao serverDao = daoMap.get(id);
//            List<Map> resultList = GlobalCache.objectCtl.list(serverDao, Sqls.create("select * from sys_user_role"));
//            for (Map map : resultList) {
//                /*获取第一个key 目的：解决主键名不全是id 如：（dept_id.....）的问题*/
//                String firstKey = null;
//                for (Object o : map.keySet()) {
//                    firstKey = (String) o;
//                    break;
//                }
//                /*通过主键id(firstKey) 以及 code(库名) 联合查询汇总库中的此表中是否存在这条数据
//                 * 如果存在 返回主键id(firstKey) 执行update方法 ： **目前就算数据未发生修改也会执行此方法
//                 * 还未实现只对修改过的数据进行更新
//                 * */
//                String uid = GlobalCache.objectCtl.getStrRowValue(GlobalCache.localDao, Sqls.create("select uid from sys_user_role where code='" + GlobalCache.pojoList.get(Integer.parseInt(id) - 1).getTableName() +"' and " + firstKey +"='" + map.get(firstKey) + "'"));
//                if (uid != "") {
//                    GlobalCache.localDao.update("sys_user_role", Chain.from(map), Cnd.where("uid", "=", uid));
//                    System.out.println("执行了更新操作");
//                } else {
//                    /* 说明 要操作的表名*/
//                    map.put(".table","sys_user_role");
//                    /*添加数据库名称*/
//                    map.put("code",GlobalCache.pojoList.get(Integer.parseInt(id) - 1).getTableName());
//                    GlobalCache.localDao.insert(map);
//                }
//            }
//        }
//    }

}


//    public static void tbData02(){
//        Long uid= 0L;
//        //遍历所有需要同步的数据库链接池
//        Map<String, Dao> daoMap = GlobalCache.dataSourceMap;
//        for(String id:daoMap.keySet()){
//            Dao serverDao = daoMap.get(id);
//            //查询需要同步的表的 数据
//            SaasServiceOrder saasServiceOrder = new SaasServiceOrder();
//            List<? extends SaasServiceOrder> list = GlobalCache.objectCtl.list(GlobalCache.dataSourceMap.get(id), saasServiceOrder.getClass(), Sqls.create("select * from saas_service_order"));
//            for (SaasServiceOrder pojo : list) {
//                uid+= 1;
//                pojo.setId(uid);
//                pojo.setCode(GlobalCache.pojoList.get(Integer.parseInt(id) - 1).getTableName());
//                GlobalCache.objectCtl.add(GlobalCache.localDao, pojo);
//            }
//
//        }
//
//    }
//            List<Map> saasCardAccountList = GlobalCache.objectCtl.list(GlobalCache.dataSourceMap.get(id), Sqls.create("select * from saas_nurse_info"));
//            for (Map map : saasCardAccountList) {
//                map.remove("id");
//                map.put("code", GlobalCache.pojoList.get(Integer.parseInt(id)).getTableName());
//                /*将要同步的库名加入到汇总表当中*/
////                saasNurseInfo.setWorkerUid((String) map.get("worker_uid"));
////                saasNurseInfo.setName((String) map.get("name"));
////                saasNurseInfo.setCode((String) map.get("code"));
//                SaasNurseInfo saasNurseInfo1 = list.get(0);
//                System.out.println(saasNurseInfo1);
//            }
//            System.out.println(saasCardAccountList);
//            //对数据进行遍历插入汇总库
//            for (Map map :saasCardAccountList) {
//               String databaseName = GlobalCache.objectCtl.getStrRowValue(GlobalCache.localDao,Sqls.create("select datasource_name from 数据源配置表"));
//                map.put(".table","表名");
//                map.put("某库",databaseName);
//                map.put("某库某表的数据id","");
//                map.remove("id");
//
//                int count = GlobalCache.objectCtl.getIntRowValue(GlobalCache.localDao,Sqls.create("select count(1) from 表名 where 条件"));
//                if(count>0){
//                    //Nutz  update 方法（map键值对）
////                    GlobalCache.localDao.update(”表名“, Chain.from(map));
//
//                }else{
//                    GlobalCache.localDao.insert(map);
//                }
//            }

//记录本次updateTime记录本次时间最大的一个